#pragma once
#include <math.h>

#include "OpenCL/clUtil/clUtil.h"

enum WalkerDeviceType
{
  kCPU,
  kOpenCL
};

class WalkerGroup
{
  public:
    virtual void compute(cl_event* event) = 0;
    virtual void writeToDisk(const char* filename) = 0;
    virtual void getX(float* output) = 0;
    virtual void getY(float* output) = 0;
    virtual void getZ(float* output) = 0;
    unsigned int getNumParticles(){return mNumParticles;}
    virtual double getEnergy() = 0;
    virtual ~WalkerGroup();
    WalkerGroup();
  protected:
    unsigned int mNumWalkers;
    WalkerDeviceType mType;
    unsigned int mNumParticles;
    unsigned int mNumIterations;
};
